home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Users Group Library 1996 July
/
C-C++ Users Group Library July 1996.iso
/
listings
/
v_09_11
/
9n11023a
< prev
next >
Wrap
Text File
|
1991-08-26
|
2KB
|
74 lines
/* ------------------------------------------------------------ */
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <string.h>
#define EXACT 1 /* locate_node match flags */
#define INEXACT 2
#define NUMELEM(a) (sizeof(a)/sizeof((a)[0]))
typedef struct node {
struct node *pfwd; /* ptr to next node in list */
struct node *pbwd; /* ptr to prev node in list */
void (*process)(unsigned); /* function to call */
unsigned priority; /* function priority */
} Node;
Node *proot_node; /* start of data list */
Node *pfree_node = NULL;/* next free node */
Node *get_free_node(void);
Node *locate_node(unsigned priority, int match);
void add_node(void); /* action functions */
void help(void);
void myexit(void);
void proc_cmd(int dummy);
void idle(unsigned); /* process functions */
void pro1(unsigned);
void pro2(unsigned);
void pro3(unsigned);
/* --------------------------------------------------------------
FUNCTION MAIN:
The dummy header node head_node is allocated and initialized in
the declaration.
A. Register proc_cmd as the handler for the next SIGINT signal.
B. Cycle indefinitely through circular list, processing nodes.
-------------------------------------------------------------- */
main()
{
const Node *pnode; /* Node just allocated */
static Node head_node = {
&head_node,
&head_node,
&idle,
0
};
/*A*/ pnode = proot_node = &head_node;
if (signal(SIGINT, proc_cmd) == SIG_ERR) {
fprintf(stderr, "can't register handler\n");
exit(EXIT_FAILURE);
}
/*B*/ while (1) {
(*pnode->process)(pnode->priority);
pnode = pnode->pfwd;
}
return(EXIT_SUCCESS);
}